import type {
  CellCls,
  CellStyle,
  ColumnCls,
  ColumnStyle,
  ElTable,
  Sort,
  SummaryMethod,
  TableColumnCtx,
  TreeNode
} from "element-plus"
import type { EpPropMergeType } from "element-plus/es/utils"

export type size = EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never> | undefined
export type rowClassName = ColumnCls<any> | undefined
export type rowStyle = ColumnStyle<any> | undefined
export type cellClassName = CellCls<any> | undefined
export type cellStyle = CellStyle<any> | undefined
export type headerRowClassName = ColumnCls<any> | undefined
export type headerRowStyle = ColumnStyle<any> | undefined
export type headerCellClassName = CellCls<any> | undefined
export type headerCellStyle = CellStyle<any> | undefined
export type rowKey = string | ((row: any) => string) | undefined
export type defaultSort = Sort | undefined
export type pageSizes = number[]
export type summaryMethod = SummaryMethod<any> | undefined
export type spanMethod =
  | ((data: { row: any; rowIndex: number; column: TableColumnCtx<any>; columnIndex: number }) =>
      | number[]
      | {
          rowspan: number
          colspan: number
        }
      | undefined)
  | undefined
export type load = ((row: any, treeNode: TreeNode, resolve: (data: any[]) => void) => void) | undefined
export type item = {
  slot: any
  type: any
  index: any
  columnKey: any
  label: any
  prop: any
  width: any
  minWidth: any
  fixed: any
  renderHeader: any
  sortable: any
  sortMethod: any
  sortBy: any
  sortOrders: any
  resizable: any
  formatter: any
  showOverflowTooltip: any
  align: any
  headerAlign: any
  className: any
  labelClassName: any
  selectable: any
  reserveSelection: any
  filters: any
  filterPlacement: any
  filterMultiple: any
  filterMethod: any
  filteredValue: any
}
